package orm

import (
	"database/sql"
)

// 事务实例
type Tx struct {
	serNo int
	db    *DB
	tx    *sql.Tx
}

func newTx(db *DB, tx *sql.Tx) *Tx {
	return &Tx{
		db: db,
		tx: tx,
	}
}

// 事务内唯一序列数
func (tx *Tx) SerNo() int {
	tx.serNo += 1
	return tx.serNo
}

// 获取数据库
func (tx *Tx) DB() *DB {
	return tx.db
}

// 提交事务
func (tx *Tx) Commit() error {
	return tx.tx.Commit()
}

// 回滚事务
func (tx *Tx) Rollback() error {
	return tx.tx.Rollback()
}

// 获取数据集
func (tx *Tx) Get(name string) *Dataset {
	return newDataset(tx, tx.db.adaptor.Table(underscore(name)))
}

func (tx *Tx) Exec(query string, args ...interface{}) error {
	_, err := tx.tx.Exec(query, args...)
	return err
}

func (tx *Tx) Query(query string, args ...interface{}) (*sql.Rows, error) {
	return tx.tx.Query(query, args...)
}

func (tx *Tx) QueryRow(query string, args ...interface{}) *sql.Row {
	return tx.tx.QueryRow(query, args...)
}
